
import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserProfileAPI, getUserInfoAPI } from '@/api'
import { resetRouter } from '@/router'
// 得到默认的state对象
const getDefaultState = () => {
  return {
    token: getToken() || '',
    userInfo: {}, // 存储用户信息
    routerList: []
  }
}

const state = getDefaultState()
const mutations = {
  // 重置state
  RESET_STATE: (state) => {
    // Object.assign() ：合并对象
    // 将参数2对象的所有的key，val合并到参数1中，遇到重名的key会覆盖参数1中的key
    removeToken() // 先移除本地token，在重置vuex中的数据
    Object.assign(state, getDefaultState())
    // 重置路由系统
    resetRouter()
  },
  // 设置token
  SET_TOKEN: (state, token) => {
    state.token = token
    setToken(token)
  },
  // 设置用户信息
  SET_USERINFO (state, userInfo) {
    state.userInfo = userInfo
  }
}

// actions 函数在dispatch调用后原地总是返回一个Promise对象
// 如果自己有return 一个promise对象会覆盖默认的promise对象
const actions = {
  // login/index.vue =》里调用
  // 登录
  async loginActions ({ commit }, loginForm) {
    // try {
    //   const res = await loginAPI(loginForm)
    //   commit('SET_TOKEN', res.data)
    //   return res
    // } catch (err) {
    //   console.log(Promise.reject(err))
    //   return Promise.reject(err)
    // }
    return new Promise((resolve, reject) => {
      loginAPI(loginForm).then(res => {
        commit('SET_TOKEN', res.data)
        resolve(res)
      }).catch(err => {
        reject(err)
      })
    })
  },
  // 获取用户信息
  async getUserInfoActions ({ commit }) {
    const data = await getUserProfileAPI()
    // console.log(1, data)
    const res = await getUserInfoAPI(data.data.userId)
    // console.log(2, res)
    commit('SET_USERINFO', { ...data.data, ...res.data })
    // permissionjs中拿到当前的res
    return data.data
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

